package com.qf.dyn;

import com.qf.service.FanDongService;
import com.qf.service.FanDongServiceImpl;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * JDK动态代理实现类
 *
 * @author lixu
 */
public class JdkProxy {


    /**
     * 中介  房东
     * 静态：
     * 中介实现类                           律师
     * 房东实现类                         打关司实现类
     * 共用同一个接口 FanDongService      打关司接口
     * <p>
     * System.out.println("==1:发布房屋信息");
     * System.out.println("==2:带租户看房");
     * System.out.println("==3:签合同");
     * System.out.println("==4:付房费");
     * System.out.println("==5:维修");
     * System.out.println("==6:转租");
     *
     * @param args
     */
    public static void main(String[] args) {

        //房东
        FanDongService fanDongService = new FanDongServiceImpl();

        Class<?>[] interfaces = {FanDongService.class};
        //JDK自带
        //1:类加载器    房东的
        //2:接口 class 数组   房东的接口
        //3:调用处理器   处理的
        FanDongService fanDongService1 = (FanDongService) Proxy.newProxyInstance(
                fanDongService.getClass().getClassLoader(),
                interfaces,
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        //判断出是房东  还是打关司类  看病
                        System.out.println("==1:发布房屋信息");
                        System.out.println("==2:带租户看房");

                        method.invoke(fanDongService,args);
                        //fanDongService.zufang();

                        System.out.println("==5:维修");
                        System.out.println("==6:转租");
                        return null;
                    }
                }
        );// 动态代理对象
        fanDongService1.zufang();



/*        Proxy.newProxyInstance(
                fanDongService.getClass().getClassLoader(),
                interfaces,
                (proxy, method, as) -> {


                    return null;
                }
        );*/
    }


}
